The present invention relates to concurrent operations in a data storage system, and more specifically, to supporting concurrent operations at fine granularity in a caching framework.
Distributed storage systems require higher performance than currently possible in response to ever increasing workload density demands. Small random writes arise from a variety of virtual machine (VM) input/output (I/O) streams. Conventional caching systems that are designed to overcome the difficulties associated with small random writes suffer from their own set of problems. For systems that utilize client caches, it is difficult to maintain consistency across replicated writes. Additionally, systems that utilize server-side caches need to be able to scale a metadata memory footprint for addressing large cache and back-end address spaces that must be used in these systems to handle the increased workload density demands.
However, scaling the metadata memory footprint for large non-volatile memory (NVM) write caches is difficult to accomplish with conventional systems. A typical cache address space includes tens to hundreds of terabytes (TB) in storage space, and should support fine-grained updates for absorbing random writes and high NVM cache utilization. Moreover, back-end address space is typically in the order of petabytes (PB), and should be configured to support coarse-grained updates for destaging sequential and large blocks of data.
A system that utilizes application or client-side caching results in a cache that is read-mostly and improves I/O latency; however, small random writes require server-side caching that is configured to scale up to large cache address spaces and is not available with application or client-side caching. A system that utilizes clustered systems caches require consistency for writes across the cluster of machines using complex mechanisms, such as checkpointing, and is typically very difficult to scale.